An increased number of features demanded from applications and shorter development cycles, increases complexity of applications and dependency on 3rd party components and libraries. Further, new programming approaches like aspect oriented programming (AOP), which helps mastering source code complexity and thus increase productivity of software development, increase the run-time complexity of applications by adding or altering classes or methods of the application during run-time.
Bytecode instrumentation based monitoring and diagnosis systems must provide adaptive, flexible instrumentation placement tools to enable application monitoring in such complex and dynamic environments. Such instrumentation placement tools must enable instrumentation placement and modification at class load-time or during run-time. Run-time changes of the application code base or 3rd party libraries and components must be managed by the placement tool, e.g. by adding new instrumentation code on-the-fly. The instrumentation tool must cope with different class loading mechanisms, including classes loading from network resources.
Further, generic instrumentation placement is required, enabling the instrumentation of top-level component interfaces like e.g. the JDBC driver interfaces, regardless of the concrete implementation of the component. The placement tool should be able to instrument any bytecode based application, regardless of the application type (e.g. J2EE, stand-alone or applet) or underlying bytecode based system (e.g. Sun Microsystem's Java or Microsoft's .NET).
Finally, an instrumentation placement tool must not interfere with behavior or functionality of the application by e.g. changing the class load order.
This section provides background information related to the present disclosure which is not necessarily prior art.